Injectable ডেকোরেটর

Web Development - অ্যাঙ্গুলার (Angular) - সার্ভিস এবং ডিপেন্ডেন্সি ইনজেকশন |

Angular-এ @Injectable ডেকোরেটর একটি ক্লাসকে ইনজেকশনের জন্য প্রস্তুত করে। এটি মূলত Angular এর ডিপেন্ডেন্সি ইনজেকশন (DI) সিস্টেমের অংশ। যখন কোনো ক্লাসে @Injectable ডেকোরেটর ব্যবহার করা হয়, তখন Angular জানে যে এই ক্লাসটিকে এক বা একাধিক কম্পোনেন্ট, সার্ভিস, বা ডিরেক্টিভে ইনজেক্ট করা যেতে পারে এবং Angular নিজে তার ইনস্ট্যান্স তৈরি করে সেগুলিতে সরবরাহ করবে।


@Injectable ডেকোরেটরের ব্যবহার

@Injectable ডেকোরেটর ব্যবহার করা হয় যখন আপনি Angular এর DI সিস্টেমের মাধ্যমে সার্ভিস বা ক্লাস ইনজেক্ট করতে চান। এটি একটি ক্লাসের জন্য নির্ধারণ করে যে সেই ক্লাসটি Angular এর DI কন্টেইনারে নিবন্ধিত হবে এবং সেই ক্লাসের ইন্সট্যান্স অটোমেটিকভাবে কম্পোনেন্ট বা সার্ভিসে ইনজেক্ট হবে।

@Injectable ডেকোরেটর ব্যবহার করা

@Injectable ডেকোরেটর সাধারণত সার্ভিস ক্লাসে ব্যবহৃত হয়, তবে এটি অন্য যেকোনো ক্লাসে ব্যবহার করা যেতে পারে যেটি DI মাধ্যমে সরবরাহ করতে চান।

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'  // 'root' নির্দেশ করে সার্ভিসটি পুরো অ্যাপ্লিকেশন জুড়ে একটি একক ইনস্ট্যান্স হিসেবে থাকবে
})
export class MyService {

  constructor() { }

  getGreeting(): string {
    return "Hello from MyService!";
  }
}

এখানে:

  • @Injectable() ডেকোরেটরটি Angular কে জানিয়ে দেয় যে এই ক্লাসটি সার্ভিস হিসেবে ইনজেকশনযোগ্য।
  • providedIn: 'root' নির্দেশ করে যে সার্ভিসটি অ্যাপ্লিকেশনের একক (singleton) ইন্সট্যান্স হিসেবে ব্যবহৃত হবে এবং এটি অ্যাপ্লিকেশনের পুরো লাইফটাইম জুড়ে অ্যাক্সেসযোগ্য থাকবে।

@Injectable ডেকোরেটরের কনফিগারেশন

@Injectable ডেকোরেটরের মধ্যে providedIn একটি অত্যন্ত গুরুত্বপূর্ণ কনফিগারেশন। এটি নির্ধারণ করে সার্ভিসটি কোথায় ব্যবহারযোগ্য হবে। এর বিভিন্ন মান হতে পারে:

  • providedIn: 'root': সার্ভিসটি অ্যাপ্লিকেশনের সমস্ত অংশে শেয়ার করা যাবে এবং এটি একক (singleton) হিসেবে ব্যবহৃত হবে।
  • providedIn: 'any': সার্ভিসটি lazy-loaded মডিউলগুলির জন্য আলাদাভাবে তৈরি হবে। এটি তখন কেবলমাত্র সেই মডিউলে ব্যবহারযোগ্য হবে যেটি লোড হয়েছে।
  • providedIn: 'platform': সার্ভিসটি অ্যাপ্লিকেশনের সার্বিক লাইফটাইমে একাধিক ইন্সট্যান্সে প্রদত্ত হবে, এটি সাধারণত অ্যাঙ্গুলারের গভীর সার্ভিসগুলোতে ব্যবহৃত হয়।
  • providedIn: 'module': সার্ভিসটি শুধুমাত্র নির্দিষ্ট মডিউলে ইনজেক্ট করা হবে।

@Injectable ডেকোরেটরের কার্যকারিতা

@Injectable ডেকোরেটর মূলত Angular-কে জানিয়ে দেয় যে ওই ক্লাসটির জন্য ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করা যাবে। যেহেতু সার্ভিস ক্লাস সাধারণত ডিপেন্ডেন্সি হিসেবে কাজ করে, Angular এই সার্ভিস ক্লাসের একটি ইন্সট্যান্স তৈরি করে এবং যখনই ওই সার্ভিসটি প্রয়োজন হয়, এটি কম্পোনেন্টে ইনজেক্ট করে দেয়।

উদাহরণ

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class UserService {
  private users = ['John', 'Jane', 'Doe'];

  getUsers() {
    return this.users;
  }
}

এখানে UserService একটি সার্ভিস যা ব্যবহারকারীদের তালিকা সরবরাহ করে। এই সার্ভিসটি @Injectable ডেকোরেটর দ্বারা ইনজেকশনযোগ্য করে তোলা হয়েছে এবং এটি rootprovidedIn মান সহ মডিউলের মধ্যে উপলব্ধ।

সার্ভিস ইনজেক্ট করা

কম্পোনেন্টে এই সার্ভিস ইনজেক্ট করতে:

import { Component } from '@angular/core';
import { UserService } from './user.service';

@Component({
  selector: 'app-root',
  template: `<h1>{{ users }}</h1>`
})
export class AppComponent {
  users: string[];

  constructor(private userService: UserService) {
    this.users = this.userService.getUsers();
  }
}

এখানে:

  • UserService কে AppComponent-এ ইনজেক্ট করা হয়েছে constructor এর মাধ্যমে।
  • Angular নিজে UserService এর ইন্সট্যান্স তৈরি করেছে এবং এটি AppComponent-এ ইনজেক্ট করেছে।

সারাংশ

  • @Injectable ডেকোরেটরটি একটি ক্লাসকে ইনজেকশনযোগ্য করে তোলে।
  • এটি মূলত সার্ভিস ক্লাসে ব্যবহৃত হয় এবং Angular এর ডিপেন্ডেন্সি ইনজেকশন সিস্টেমের মাধ্যমে সেই সার্ভিসটিকে ইনজেক্ট করতে সাহায্য করে।
  • providedIn কনফিগারেশন ব্যবহার করে নির্ধারণ করা হয় সার্ভিসটি অ্যাপ্লিকেশনের কোথায় ইনজেক্ট হবে।
Content added By
Promotion